# -*- coding: utf-8 -*-
# @Author  : longbhu
# @Time    : 2025/2/25 15:58
# @Function: 在一定程度上解决了eco.tif与excel数据相乘的问题
import pandas as pd
import rasterio
import numpy as np

def replace_tif_values(input_tif_path, output_tif_path, excel_file_path):
    """
    根据Excel文件中的映射关系替换TIF文件中的值。

    参数:
    input_tif_path (str): 输入的TIF文件路径。
    output_tif_path (str): 输出的TIF文件路径。
    excel_file_path (str): 包含映射关系的Excel文件路径。

    返回:
    None
    """
    try:
        df = pd.read_excel(excel_file_path)
        mapping_dict = dict(zip(df['code'], df['value']))
        print(f": 将 Excel 数据读取成字典: {mapping_dict}")
    except Exception as e:
        print(f": 加载文件 {excel_file_path} 时出错: {e}")
        return

    # 读取原始 TIF 文件
    with rasterio.open(input_tif_path) as src:
        # 获取原始数据
        image = src.read(1)  # 假设是单波段 TIF 文件
        meta = src.meta.copy()  # 复制元数据

    # 替换值
    for key, value in mapping_dict.items():
        image[image == key] = value

    # 保存为新的 TIF 文件
    with rasterio.open(output_tif_path, "w", **meta) as dst:
        dst.write(image, 1)

    print(f"处理完成，结果已保存到：{output_tif_path}")

# 示例调用
# replace_tif_values(r"F:\test_files\eco\ecosystem_森林生态系统.tif", r"F:\test_files\eco\ecosystem_森林生态系统_replaced.tif", r'F:\code\dev\calc-gep-regulate-cqc\devCalc\data\dev01.xlsx')

"""
熟悉NumPy 布尔索引的基本原理

array = np.array([1, 2, 3, 4, 5])
condition = array > 3
selected_elements = array[condition]
print(selected_elements)  # 输出：[4, 5]


array > 3 返回一个布尔数组 [False, False, False, True, True]，然后 array[condition] 根据布尔数组选择对应的元素。

总结：np数组用条件运算符可以得到对应的布尔数组。

# 替换矩阵中的值
for key, value in mapping_dict.items():
    matrix[matrix == key] = value

print(matrix)
"""


